package com.wu.flandre.util;

import com.wu.flandre.component.GlobalConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.text.MessageFormat;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Map;
import java.util.Properties;
import java.util.UUID;

/**
 * CommonUtil 通用工具类 <br/>
 *
 * @author 50816 <br/>
 * @date 2019/12/1 20:01 <br/>
 */
@Component
@Slf4j
public class CommonUtil {

    /**
     * 字符串替换 eg: template=用户名是${name},params={"name","wu"}
     * 替换成 用户名是wu,注意替换顺序
     *
     * @param template
     * @param params
     * @return
     */
    public String stringReplaceByMap(String template, Map<String, String> params) {
        for (String str : params.keySet()) {
            template = template.replaceAll("\\$\\{".concat(str).concat("\\}"), params.get(str));
        }
        return template;
    }

    /**
     * 我的名字是{0},年龄{1}.str:"wu","21"
     * 我的名字是wu,年龄21
     *
     * @param template
     * @param str
     * @return
     */
    public String stringReplaceByArray(String template, String... str) {
        return MessageFormat.format(template, str);
    }

    /**
     * 获取UUID
     *
     * @return
     */
    public String getUUID() {
        return UUID.randomUUID().toString().replace("-", "");
    }

    /**
     * 获取整形时间戳(秒)
     *
     * @return
     */
    public Long getTimestamp() {
        return LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8"));
    }

    /**
     * 获取格式化时间
     *
     * @param formatter 格式化样式
     * @return
     */
    public String getFormatterTime(String formatter) {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(formatter));
    }

    /**
     * 获取默认格式化时间
     *
     * @return
     */
    public String getFormatterTime() {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }

    public boolean isLinuxSystem() {
        Properties prop = System.getProperties();

        String os = prop.getProperty("os.name");
        if (os != null && os.toLowerCase().contains(GlobalConstant.LINUX_OS)) {
            return true;
        } else {
            return false;
        }
    }

}
